
#ifndef __H_MUSCL_INSTRUCTION
#define __H_MUSCL_INSTRUCTION

#include <list>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
 
#define INSTRUCTION_TYPE_NONE     0



///////////////////////////////////////////////////  INSTRUCTION EXCEPTION  ///////////////////////////////////////////////////
class InstructionException {
  private:
    std::string     _message;

    void  setMessage( const std::string& message ) { _message = message; return; }

  public:
    InstructionException( void );
    InstructionException( const std::string& file, const unsigned long& line, const std::string& extra = "" );
    InstructionException( const InstructionException& ref );
    ~InstructionException( void );

    std::string    getMessage( void ) const { return _message; }
};



///////////////////////////////////////////////////  INSTRUCTION CLASS  ///////////////////////////////////////////////////
class Instruction {
  private:
    // Data...
    short                       _type;

    // Private methods...
    void                        copy( const Instruction& ref );

  public:
    // Constructors...
    Instruction( void );
    Instruction( const Instruction& ref );
    ~Instruction( void );

    // General operators...
    Instruction&                operator = ( const Instruction& ref );

    // Public accessor methods...
    void                        type( const short& type )                       { _type = type; }
    short                       type( void ) const                              { return _type; }
};



#endif // End of inclusion guard

